package com.wangdong.yating;

import android.graphics.Bitmap;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.gson.Gson;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.BitmapCallback;
import com.zhy.http.okhttp.callback.Callback;
import com.zhy.http.okhttp.callback.FileCallBack;
import com.zhy.http.okhttp.callback.StringCallback;
import com.zhy.http.okhttp.request.RequestCall;

import java.io.File;
import java.io.IOException;

import okhttp3.Call;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OKhttpActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         * get请求
         */
        String url = "http://www.csdn.net/";
        OkHttpUtils
                .get()
                .url(url)
                .addParams("username", "hyman")
                .addParams("password", "123")
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {

                    }

                    @Override
                    public void onResponse(String response, int id) {

                    }
                });

        /**
         * post请求
         */
        OkHttpUtils
                .post()
                .url(url)
                .addParams("username", "hyman")
                .addParams("password", "123")
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {

                    }

                    @Override
                    public void onResponse(String response, int id) {

                    }
                });

        /**
         * post json
         * 提交一个Gson字符串到服务器端，注意：传递JSON的时候，不要通过addHeader去设置contentType，
         * 而使用.mediaType(MediaType.parse("application/json; charset=utf-8")).。
         */
        OkHttpUtils
                .postString()
                .url(url)
                .content(new Gson().toJson(new User("zhy", "123")))
                .mediaType(MediaType.parse("application/json; charset=utf-8"))
                .build()
                .execute(new MyStringCallback());
        /**
         * post file
         * 将文件作为请求体，发送到服务器。
         */
        File file = getDatabasePath("/mnt/sdcard/wangdong");
        if (!file.exists()){
            return;
        }
        OkHttpUtils
                .postFile()
                .url(url)
                .file(file)
                .build()
                .execute(new MyStringCallback());

        /**
         * Post表单形式上传文件
         * 支持单个多个文件，addFile的第一个参数为文件的key，即类别表单中<input type="file" name="mFile"/>的name属性
         */
        File file2 = getDatabasePath("/mnt/sdcard/wangdong");
        OkHttpUtils.post()//
                .addFile("mFile", "messenger_01.png", file)//
                .addFile("mFile", "test1.txt", file2)//
                .url(url)
//                .params(params)
//                .headers(headers)
                .build()//
                .execute(new MyStringCallback());

        /**
         * 下载文件
         * 注意下载文件可以使用FileCallback，需要传入文件需要保存的文件夹以及文件名。
         */
        OkHttpUtils//
                .get()//
                .url(url)//
                .build()//
                .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(),"wnagdong.jar") {

                    /**
                     * 上传下载的进度显示
                     * @param progress
                     * @param total
                     * @param id
                     * callback回调中有inProgress 方法，直接复写即可。
                     */
                    @Override
                    public void inProgress(float progress, long total, int id) {

                        super.inProgress(progress, total, id);
                       // mProgressBar.setProgress((int) (100 * progress));
                    }

                    @Override
                    public void onError(Call call, Exception e, int id) {

                    }

                    @Override
                    public void onResponse(File response, int id) {

                    }
                });
        /**
         * 显示图片
         *显示图片，回调传入BitmapCallback即可。
         */
        OkHttpUtils
                .get()//
                .url(url)//
                .build()//
                .execute(new BitmapCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
//                        mTv.setText("onError:" + e.getMessage());
                    }

                    @Override
                    public void onResponse(Bitmap response, int id) {
//                        mImageView.setImageBitmap(bitmap);
                    }
                });
        /**
         * HEAD、DELETE、PUT、PATCH
         * 如果需要requestBody，例如：PUT、PATCH，自行构造进行传入。
         */
        OkHttpUtils
                .put()//also can use delete() ,head() , patch()
                .requestBody(RequestBody.create(null, "may be something"))//
                .build()//
                .execute(new MyStringCallback());

        /**
         * 同步的请求
         * execute方法不传入callback即为同步的请求，返回Response。
         */
        try {
            Response response = OkHttpUtils
                    .get()//
                    .url(url)//
                    .tag(this)//
                    .build()//
                    .execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
        /**
         * 取消单个请求
         */
        RequestCall call = OkHttpUtils.get().url(url).build();
        call.cancel();
        /**
         * 根据tag取消请求
         * 目前对于支持的方法都添加了最后一个参数Object tag，取消则通过 OkHttpUtils.cancelTag(tag)执行。
         * 在Activity中，当Activity销毁取消请求：
         */
        OkHttpUtils
                .get()//
                .url(url)//
                .tag(this)//
                .build();//
//        @Override
//        protected void onDestroy()
//        {
//            super.onDestroy();
            //可以取消同一个tag的
//        OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求
//        }
//        比如，当前Activity页面所有的请求以Activity对象作为tag，可以在onDestory里面统一取消。

    }
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        OkHttpUtils.getInstance().cancelTag(this);
    }



}
